{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 270,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import scipy.io as scio\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.lines import Line2D\n",
    "import pylab\n",
    "%matplotlib inline\n",
    "pylab.rcParams['figure.figsize']=(15,10)   # 设置图表的大小"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 271,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data数据类型为：<class 'dict'>,\n",
      "data中包含的键为：dict_keys(['__globals__', 'wordlist', 'newsgroups', 'documents', '__header__', '__version__', 'groupnames'])\n"
     ]
    }
   ],
   "source": [
    "# 载入数据集，并查看数据集基本信息\n",
    "matfilepath='20news_w100.mat'\n",
    "data=scio.loadmat(matfilepath)\n",
    "print('data数据类型为：{0},\\ndata中包含的键为：{1}'.format(type(data),data.keys()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 272,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "X的数据类型为：<class 'scipy.sparse.csc.csc_matrix'>,\n",
      "X的形状为：(100, 16242)\n"
     ]
    }
   ],
   "source": [
    "# 查看文本的基本信息，X的形状为(100,16242)，其中100为单词数量，16242为文本数量\n",
    "X = data['documents']\n",
    "print('X的数据类型为：{0},\\nX的形状为：{1}'.format(type(X),X.shape))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 273,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(16242, 100) <class 'scipy.sparse.csr.csr_matrix'>\n"
     ]
    }
   ],
   "source": [
    "# 对X进行转置，形成（16242,100）的矩阵\n",
    "X = X.T  # 对X进行转置\n",
    "print(X.shape,type(X))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 274,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "所有文本对应的标签向量y类型为：<class 'numpy.ndarray'>,形状为：(1, 16242)\n",
      "<class 'numpy.ndarray'> (1, 4)\n"
     ]
    }
   ],
   "source": [
    "# 查看所有文本对应的标签向量y\n",
    "y = data['newsgroups']\n",
    "print('所有文本对应的标签向量y类型为：{0},形状为：{1}'.format(type(y),y.shape))\n",
    "# 查看所有文本中具有的类的数量\n",
    "classlabels = data['groupnames']\n",
    "print(type(classlabels),classlabels.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 275,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(16242, 1) \n",
      " [[5]\n",
      " [1]\n",
      " [3]\n",
      " [3]\n",
      " [4]] <class 'numpy.matrixlib.defmatrix.matrix'>\n"
     ]
    }
   ],
   "source": [
    "# 对每个文本中的单词数量进行统计\n",
    "nwords=np.sum(X,1)   # 统计每个文档中的单词数量\n",
    "print(nwords.shape,'\\n',nwords[:5],type(nwords))   # 打印前5个数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 276,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(16242, 1) <class 'numpy.matrixlib.defmatrix.matrix'>\n",
      "(1000, 1) <class 'numpy.ndarray'>\n"
     ]
    }
   ],
   "source": [
    "# 根据统计的文本单词数量，提取单词数量最多的前1000个文本\n",
    "word_num_index = np.argsort(-nwords,axis=0)    # 获取降序排序后的索引值\n",
    "print(word_num_index.shape,type(word_num_index))\n",
    "index_1000 = np.array(word_num_index[:1000])         # 提取前1000个单词的索引值\n",
    "print(index_1000.shape,type(index_1000))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 277,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'numpy.ndarray'> (1000, 100)\n",
      "<class 'numpy.ndarray'> (1000, 1)\n",
      "(1000, 100)\n"
     ]
    }
   ],
   "source": [
    "XX=X[index_1000.flatten()].toarray()   #根据提取的1000个索引值，对X进行花式索引\n",
    "yy=y.T[index_1000.flatten()]           #同样对每个文本的标签值进行花式索引\n",
    "print(type(XX),XX.shape)               # 输出查看相关结果的数据类型\n",
    "print(type(yy),yy.shape)\n",
    "new_yy=np.sort(yy,axis=0)              # 对yy进行升序排列，将不同的类归置到一起\n",
    "index_of_yy=np.argsort(yy,axis=0)      # 获取排序后的索引值\n",
    "XX=XX[index_of_yy.flatten()]           # 根据获得的索引值对XX进行花式索引\n",
    "print(XX.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 278,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1 2 3 4]\n"
     ]
    }
   ],
   "source": [
    "yy_unique=np.unique(new_yy)   # 获取标签中的不重合类别\n",
    "print(yy_unique)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 279,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = plt.gca()\n",
    "ax.imshow(XX,cmap=plt.cm.gray_r,aspect='auto')  # 根据矩阵绘制灰度图\n",
    "# 绘制划分类别的分界线\n",
    "for label in yy_unique[:-1]:\n",
    "    label_index = np.where(new_yy.flatten()==label)[-1][-1]\n",
    "    line1 = [(0, label_index), (XX.shape[1],label_index)]\n",
    "    (line1_xs, line1_ys) = zip(*line1)\n",
    "    ax.add_line(Line2D(line1_xs, line1_ys, linewidth=5, color='red'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
